package io.gitee.thghh.generate.core.controller;

import com.mybatisflex.core.paginate.Page;
import io.gitee.thghh.generate.core.entity.TypeConfig;
import io.gitee.thghh.generate.core.mapstruct.TypeConfigVoEntityMapstruct;
import io.gitee.thghh.generate.core.service.TypeConfigService;
import io.gitee.thghh.generate.core.vo.TypeConfigVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 数据库与java类型配置 控制层。
 *
 * @author pengzhikang
 * @since 2025-03-27
 */
@Component
public class TypeConfigController {

    @Autowired
    private TypeConfigService typeConfigService;

    @Autowired
    private TypeConfigVoEntityMapstruct mapstruct;

    /**
     * 添加数据库与java类型配置。
     *
     * @param typeConfig 数据库与java类型配置
     * @return {@code true} 添加成功，{@code false} 添加失败
     */
    public Long save(TypeConfigVo typeConfig) {
        TypeConfig entity = mapstruct.mapstruct(typeConfig);
        typeConfigService.save(entity);
        return entity.getId();
    }

    /**
     * 根据主键删除数据库与java类型配置。
     *
     * @param id 主键
     * @return {@code true} 删除成功，{@code false} 删除失败
     */
    public boolean remove(Long id) {
        return typeConfigService.removeById(id);
    }

    /**
     * 根据主键更新数据库与java类型配置。
     *
     * @param typeConfig 数据库与java类型配置
     * @return {@code true} 更新成功，{@code false} 更新失败
     */
    public boolean update(TypeConfigVo typeConfig) {
        return typeConfigService.updateById(mapstruct.mapstruct(typeConfig));
    }

    /**
     * 查询所有数据库与java类型配置。
     *
     * @return 所有数据
     */
    public List<TypeConfigVo> list() {
        return mapstruct.batchMapstructReverse(typeConfigService.list());
    }

    /**
     * 根据数据库与java类型配置主键获取详细信息。
     *
     * @param id 数据库与java类型配置主键
     * @return 数据库与java类型配置详情
     */
    public TypeConfigVo getInfo(Long id) {
        return mapstruct.mapstructReverse(typeConfigService.getById(id));
    }

    /**
     * 分页查询数据库与java类型配置。
     *
     * @param page 分页对象
     * @return 分页对象
     */
    public Page<TypeConfig> page(Page<TypeConfig> page) {
        return typeConfigService.page(page);
    }

}
